package com.reverse.engineering.util.core.run.enums;

/**
 * 数据库类型,Java类型,Java类型包装类,Java类型对应包名,jdbcType类型,XML参数返回值类型
 * 
 * @author liu
 * @date 2020-08-14
 */
public enum FieldEquals {

    /**数据库类型,Java基础类型,Java类型包装类,Java类型对应包名,jdbcType类型,XML参数返回值类型*/
    /***/
    CHAR("CHAR", "String", "String", "", "CHAR", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    VARCHAR("VARCHAR", "String", "String", "", "VARCHAR", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    LONGVARCHAR("LONGVARCHAR", "String", "String", "", "LONGVARCHAR", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    BIT("BIT", "boolean", "Boolean", "", "BIT", "boolean", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    BOOLEAN("BOOLEAN", "boolean", "Boolean", "", "BOOLEAN", "boolean", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    // TINYINT("TINYINT", "byte", "Byte", "", "TINYINT", "byte", true, true, true,
    // new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
    // "zerofill"}),
    TINYINT("TINYINT", "int", "Integer", "", "INTEGER", "int", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    SMALLINT("SMALLINT", "short", "Short", "", "SMALLINT", "short", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    INT("INT", "int", "Integer", "", "INTEGER", "int", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    INTEGER("INTEGER", "int", "Integer", "", "INTEGER", "int", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    // BIGINT("BIGINT", "long", "Long", "", "BIGINT", "long", true, true, true,
    // new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
    // "zerofill"}),
    /***/
    BIGINT("BIGINT", "long", "Long", "", "BIGINT", "long", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    DECIMAL("DECIMAL", "BigDecimal", "BigDecimal", "java.math.BigDecimal", "DECIMAL", "BigDecimal", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    NUMERIC("NUMERIC", "BigDecimal", "BigDecimal", "java.math.BigDecimal", "NUMERIC", "BigDecimal", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    REAL("REAL", "float", "Float", "", "REAL", "float", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    FLOAT("FLOAT", "float", "Float", "", "FLOAT", "float", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    DOUBLE("DOUBLE", "double", "Double", "", "DOUBLE", "double", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    BINARY("BINARY", "byte[]", "byte[]", "", "BINARY", "byte[]", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    VARBINARY("VARBINARY", "byte[]", "byte[]", "", "VARBINARY", "byte[]", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    LONGVARBINARY("LONGVARBINARY", "byte[]", "byte[]", "", "LONGVARBINARY", "byte[]", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    DATE("DATE", "Date", "Date", "java.util.Date", "DATE", "date", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    TIME("TIME", "Time", "Time", "java.sql.Time", "TIME", "date", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    DATETIME("DATETIME", "Date", "Date", "java.util.Date", "TIMESTAMP", "date", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    TIMESTAMP("TIMESTAMP", "Date", "Date", "java.util.Date", "TIMESTAMP", "date", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    CLOB("CLOB", "Clob", "", "", "Clob", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    BLOB("BLOB", "Blob", "", "", "BLOB", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    ARRAY("ARRAY", "Array", "", "", "ARRAY", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    DISTINCT("DISTINCT", "String", "String", "", "DISTINCT", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    STRUCT("STRUCT", "Struct", "", "", "", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    REF("REF", "Ref", "", "", "", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    DATALINK("DATALINK", "URL", "", "", "", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),

    /***/
    DOUBLE_PRECISION("DOUBLE PRECISION", "double", "Double", "", "DOUBLE PRECISION", "double", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    ENUM("ENUM", "String", "String", "", "ENUM", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    LONGBLOB("LONGBLOB", "byte[]", "", "", "", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    LONGTEXT("LONGTEXT", "String", "String", "", "LONGTEXT", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    MEDIUMBLOB("MEDIUMBLOB", "byte[]", "", "", "", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    MEDIUMINT("MEDIUMINT", "int", "Integer", "", "MEDIUMINT", "int", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    // MEDIUMTEXT("MEDIUMTEXT", "String", "String", "", "MEDIUMTEXT", "string", true, true, true,
    // new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
    // "zerofill"}),
    MEDIUMTEXT("MEDIUMTEXT", "String", "String", "", "VARCHAR", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    SET("SET", "String", "String", "", "SET", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    // TEXT("TEXT", "String", "String", "", "TEXT", "string", true, true, true,
    // new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
    // "zerofill"}),
    TEXT("TEXT", "String", "String", "", "VARCHAR", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    TINYBLOB("TINYBLOB", "byte[]", "", "", "", "", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    TINYTEXT("TINYTEXT", "String", "String", "", "TINYTEXT", "string", true, true, true,
        new String[] {"primary key", "auto_increment", "unique", "default", "null", "not null", "index", "binary",
            "zerofill"}),
    /***/
    YEAR("YEAR", "Date", "", "", "", "", true, true, true, new String[] {"primary key", "auto_increment", "unique",
        "default", "null", "not null", "index", "binary", "zerofill"});

    /**数据库类型*/
    private String database;
    /**Java基础类型*/
    private String javaBase;
    /**Java类型包装类*/
    private String java;
    /**Java类型对应包名*/
    private String packageName;
    /**jdbcType类型*/
    private String xml;
    /**XML参数返回值类型*/
    private String xmlParam;
    /**是否允许为主键*/
    private boolean allowPrimarykey;
    /**是否允许自增*/
    private boolean allowAutoIncrement;
    /**是否允许有长度*/
    private boolean allowLength;
    /**允许的属性*/
    private String[] allowProperty;

    private FieldEquals(String database, String javaBase, String java, String packageName, String xml, String xmlParam,
        boolean allowPrimarykey, boolean allowAutoIncrement, boolean allowLength, String[] allowProperty) {
        this.database = database;
        this.javaBase = javaBase;
        this.java = java;
        this.packageName = packageName;
        this.xml = xml;
        this.xmlParam = xmlParam;
        this.allowPrimarykey = allowPrimarykey;
        this.allowAutoIncrement = allowAutoIncrement;
        this.allowLength = allowLength;
        this.allowProperty = allowProperty;
    }

    /**
     * 获取数据库类型
     * 
     * @return
     */
    public String getDatabase() {
        return database;
    }

    /**
     * 设置数据库类型
     * 
     * @param database
     */
    public void setDatabase(String database) {
        this.database = database;
    }

    /**
     * 获取Java基础类型
     * 
     * @return
     */
    public String getJavaBase() {
        return javaBase;
    }

    /**
     * 设置Java基础类型
     * 
     * @param javaBase
     */
    public void setJavaBase(String javaBase) {
        this.javaBase = javaBase;
    }

    /**
     * 获取Java类型包装类
     * 
     * @return
     */
    public String getJava() {
        return java;
    }

    /**
     * 设置Java类型包装类
     * 
     * @param java
     */
    public void setJava(String java) {
        this.java = java;
    }

    /**
     * 获取Java类型对应包名
     * 
     * @return
     */
    public String getPackageName() {
        return packageName;
    }

    /**
     * 设置Java类型对应包名
     * 
     * @param packageName
     */
    public void setPackageName(String packageName) {
        this.packageName = packageName;
    }

    /**
     * 获取jdbcType类型
     * 
     * @return
     */
    public String getXml() {
        return xml;
    }

    /**
     * 设置jdbcType类型
     * 
     * @param xml
     */
    public void setXml(String xml) {
        this.xml = xml;
    }

    /**
     * 获取XML参数返回值类型
     * 
     * @return
     */
    public String getXmlParam() {
        return xmlParam;
    }

    /**
     * 设置XML参数返回值类型
     * 
     * @param xmlParam
     */
    public void setXmlParam(String xmlParam) {
        this.xmlParam = xmlParam;
    }

    /**
     * 获取是否允许为主键
     * 
     * @return
     */
    public boolean getAllowPrimarykey() {
        return allowPrimarykey;
    }

    /**
     * 设置是否允许为主键
     * 
     * @param allowPrimarykey
     */
    public void setAllowPrimarykey(boolean allowPrimarykey) {
        this.allowPrimarykey = allowPrimarykey;
    }

    /**
     * 获取是否允许自增
     * 
     * @return
     */
    public boolean getAllowAutoIncrement() {
        return allowAutoIncrement;
    }

    /**
     * 设置是否允许自增
     * 
     * @param allowAutoIncrement
     */
    public void setAllowAutoIncrement(boolean allowAutoIncrement) {
        this.allowAutoIncrement = allowAutoIncrement;
    }

    /**
     * 获取是否允许有长度
     * 
     * @return
     */
    public boolean getAllowLength() {
        return allowLength;
    }

    /**
     * 设置是否允许有长度
     * 
     * @param allowLength
     */
    public void setAllowLength(boolean allowLength) {
        this.allowLength = allowLength;
    }

    /**
     * 获取允许的属性
     * 
     * @return
     */
    public String[] getAllowProperty() {
        return allowProperty;
    }

    /**
     * 设置允许的属性
     * 
     * @param allowProperty
     */
    public void setAllowProperty(String[] allowProperty) {
        this.allowProperty = allowProperty;
    }

}